'''
冒泡排序（Bubble Sort）是一种简单的排序算法。它重复地遍历要排序的数列，一次比较两个元素，如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换，也就是说该数列已经排序完成。
这个算法的名字由来是因为越小（或越大）的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序的算法步骤如下：
比较相邻的元素。如果第一个比第二个大（升序排序中），就交换它们两个；
对每一对相邻元素做同样的工作，从开始第一对到结尾的最后一对。这步做完后，最后的元素会是最大的数；
针对所有的元素重复以上的步骤，除了最后一个；
持续每次对越来越少的元素重复上面的步骤，直到没有任何一对数字需要比较。
时间复杂度分析
最好情况：当输入数组已经是排序好的，冒泡排序只需要进行一轮比较，不进行任何交换。因此，最好情况下的时间复杂度为O(n)，其中n是数组的长度。
最坏情况：当输入数组是逆序的，冒泡排序需要进行n-1轮比较，每轮比较都需要进行n-i次（i为当前轮数，从1开始），因此总的时间复杂度为O(n^2)。
平均情况：由于冒泡排序的性能与输入数组的初始顺序有很大关系，但大多数情况下，数组不会是完全有序或完全逆序的，因此平均情况下的时间复杂度也是O(n^2)。
空间复杂度分析
冒泡排序是一种原地排序算法，它只需要用到O(1)的额外空间来进行元素的交换，不需要使用额外的数组来存储数据。因此，冒泡排序的空间复杂度为O(1)。
总结
冒泡排序由于其简单性，在数据量较小的情况下可以使用。然而，由于其平均和最坏情况下的时间复杂度都是O(n^2)，因此在处理大数据集时效率较低，不适合用于性能要求较高的场景。在实际应用中，通常会选择更高效的排序算法，如快速排序、归并排序等。
'''
import random
class Solution():
    def bubble_sort(arr):
        n = len(arr)
        for i in range(n):
            flag = 0    #标志位，如本次遍历无交换则break
            for j in range(n-i-1):
                if arr[j]>arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
                    flag = 1
            if flag == 0:
                break
        return arr
#示例
if __name__ == '__main__':
    arr = random.sample(range(1,100),10)
    arr1 = [1,3,5,9,6,10,7]
    print('排序前:',arr)
    print('排序后：',Solution.bubble_sort(arr))
    print('排序前:',arr1)
    print('排序后：',Solution.bubble_sort(arr1))

